package com.wgy.day30.Lambda表达式.概念和标准格式;

/*
Lambda 表达式
函数式编程思想概述: 在数字中,函数就是有输入量,输出量的一套计算方案,也就是拿什么东西做什么事情,相对而言,面向对象过于强调必须通过对象的形式来做事情
                而函数式思想忽略面向对象的复杂语法,强调做什么,而不是以什么形式去做
 面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
 函数式编程思想:只要能获得结果,谁去做的,怎么做的都不重要,重视的是结果,而不是过程

 使用匿名内部类好处与弊端:一方面匿名内部类可以帮我们省去实现类的定义,另一方面,匿名内部类的语法太复杂了

 使用Lambda表达式的标准格式:
 有三个部分组成:一些参数,一个箭头,一段代码
 格式: (参数列表)->{一些重写方法的代码}
 解释说明:():接口中抽象方法的参数列表,没有参数就空着,有参数就写出参数,多个参数使用逗号分隔
         ->:传递的意思,将参数传递给方法体{}
         {}:重写接口的抽象方法的方法体

Lambda表达式的使用前提:
      1.使用Lambda表达式的必须具有接口,且要求接口中有且仅有一个抽象方法
        无论是JDK内置的Runnable,Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一的情况下才能使用Lambda.
      2.Lambda必须具有上下文推断.也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例


*/
public class Demo01Lambda {
    public static void main(String[] args) {
        //使用匿名内部类
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "新的线程创建了");
            }
        }
        ).start();

        //使用Lambda表达式,实现多线程
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "新的线程创建了");
        }
        ).start();

        //使用Lambda表达式省略格式,实现多线程
        new Thread(() -> System.out.println(Thread.currentThread().getName() + "新的线程创建了")).start();

    }

}
